/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tomasio.projects.welcome.dao;

import com.tomasio.projects.welcome.dto.AutorizacaoDeAcessoColetivaDTO;
import com.tomasio.projects.welcome.dto.GrupoAutorizacaoDeAcessoDTO;
import com.tomasio.projects.welcome.dto.TranseunteDTO;
import com.tomasio.projects.welcome.model.AutorizacaoDeAcessoColetiva;
import com.tomasio.projects.welcome.model.GrupoAutorizacaoDeAcesso;
import com.tomasio.projects.welcome.util.HibernateUtil;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

/**
 *
 * @author administrador
 */
public class HibernateGrupoAutorizacaoDeAcessoDAO implements GrupoAutorizacaoDeAcessoDAO {

    private SessionFactory sessionFactory = HibernateUtil.getSessionFactory();

    @Override
    public GrupoAutorizacaoDeAcessoDTO find(Long id) {
       
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        GrupoAutorizacaoDeAcesso grupo =
                (GrupoAutorizacaoDeAcesso) session.get(GrupoAutorizacaoDeAcesso.class, id);
        tx.commit();
        session.close();
        return grupo.createDTO();
    }

    @Override
    public void create(GrupoAutorizacaoDeAcessoDTO grupo) {
        GrupoAutorizacaoDeAcesso _grupo = new GrupoAutorizacaoDeAcesso();
        _grupo.fill(grupo);
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();

        session.save(_grupo);
        tx.commit();
        session.close();
    }

    @Override
    public void remove(Long id) {
        GrupoAutorizacaoDeAcessoDTO dto = find(id);
        GrupoAutorizacaoDeAcesso grupo =
                new GrupoAutorizacaoDeAcesso();
        grupo.fill(dto);
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.delete(grupo);
        tx.commit();
        session.close();
    }

    @Override
    public void update(GrupoAutorizacaoDeAcessoDTO grupo) {
        GrupoAutorizacaoDeAcesso _grupo = new GrupoAutorizacaoDeAcesso();
        _grupo.fill(grupo);
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.update(_grupo);
        tx.commit();
        session.close();
    }

    @Override
    public List<GrupoAutorizacaoDeAcessoDTO> findAll() {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        List<GrupoAutorizacaoDeAcesso> grupos =
                session.createQuery("from GrupoAutorizacaoDeAcesso grupo").list();
        tx.commit();
        session.close();

        List<GrupoAutorizacaoDeAcessoDTO> dtoList = new ArrayList<GrupoAutorizacaoDeAcessoDTO>();
        for (GrupoAutorizacaoDeAcesso grupo : grupos) {
            dtoList.add(grupo.createDTO());
        }
        return dtoList;
    }
}
